package main

import (
	"fmt"
	"strings"
)

func main() {
	//1、定义字符串
	var str1 string = "你好"
	var str2 = "你好"
	str3 := "你好"
	fmt.Printf("%v--%T\n", str1, str1)
	fmt.Printf("%v--%T\n", str2, str2)
	fmt.Printf("%v--%T\n", str3, str3)

	//2、转义字符
	str4 := "this \n is str" // 输入 this  换行  is str
	fmt.Println(str4)
	str5 := "C:\\GO\\Bin"
	fmt.Println(str5) // C:\GO\Bin
	str6 := "C:\\GO\\\"Bin\""
	fmt.Println(str6) // C:\GO\"Bin"

	//3、多行字符串   类似于 js模版字符串
	str7 := `
	   你好
	   换行
	   呵呵
	`
	fmt.Println(str7)

	//4、len(str)求长度
	str8 := "你好"
	fmt.Println(len(str8)) //6 一个汉字占用三个字节
	str9 := "aaa"
	fmt.Println(len(str9)) //3

	//5、拼接字符串  +   Sprintf
	fmt.Println(str8 + str9)                  //你好aaa
	str10 := fmt.Sprintf("%v %v", str8, str9) //你好 aaa
	fmt.Println(str10)

	//6、分割字符串  需要引入strings包  strings.Split() 接受两个参数，字符串，切割符号
	var str11 = "123-456-789"
	numArr := strings.Split(str11, "-")
	fmt.Println(numArr) // [123 456 789] 切片 （简单理解就是数组，但和数组有区别）

	//7、切片转换成字符串 strings.Join() 接受两个参数，  切片，需要拼接的符号
	var strArr []string = []string{"aa", "bb", "cc"}
	str12 := strings.Join(strArr, "?") //将切片内容使用 ?拼接
	fmt.Println(str12)                 // aa?bb?cc

	//前缀 后缀 包括 索引
	fmt.Println(strings.HasPrefix(str11, "123")) //true
	fmt.Println(strings.HasSuffix(str11, "789")) //true
	fmt.Println(strings.Contains(str11, "v"))    //false 包含？
	fmt.Println(strings.Index(str11, "7"))       //8   以0开始算
	fmt.Println(strings.LastIndex(str11, "7"))   //8   以0开始算
	fmt.Println(strings.Index(str11, "l"))       //-1  不存在返回-1
}
